theory GPTEE_DataStructure
imports Main
begin
section "DEFINITION"
type_synonym SYSTEM_TIME_TYPE = nat
type_synonym TEE_UUID_TYPE = nat
type_synonym TA_UUID_TYPE = nat
type_synonym CANCEL_TYPE = bool
type_synonym TIMEOUT_TYPE = nat
type_synonym TEE_PARAM_TYPES_TYPE = int
type_synonym BUFFER_OFFSET_TYPE = nat
type_synonym REF_MEM_OFFSET_TYPE = int
type_synonym COMMAND_ID_TYPE = nat
type_synonym TEE_DRIVER_TYPE = int
type_synonym SHM_FLAG_TYPE = bool
type_synonym SESSION_ID_TYPE = nat
type_synonym MULTI_SESSION_TYPE = bool
type_synonym INSTANCE_KEEP_ALIVE_TYPE = bool
type_synonym SINGLE_INSTANCE_TYPE = bool
type_synonym TEEC_VALUE_TYPE = nat
type_synonym UINT32_t = int
type_synonym FD_TYPE = nat
type_synonym REF_CNT_TYPE = nat
type_synonym BUSY_TYPE = bool
type_synonym THREAD_ID_TYPE = nat
type_synonym TIME_OFFSET_TYPE = nat
type_synonym TA_PRIORITY_TYPE = nat
type_synonym TEE_RESULT = nat
type_synonym BUFFER_ID_TYPE = nat
type_synonym BUFFER_SIZE_TYPE = nat
type_synonym VMO_ID_TYPE = nat
type_synonym VMO_SIZE_TYPE = nat
datatype TA_MODE_TYPE = DEAD | COLD_START | NORMAL
type_synonym INIT = bool
type_synonym OFFSET = nat
type_synonym DOMAIN_ID = nat
type_synonym SYSTIME = nat
type_synonym CHECKCODE = nat
type_synonym Connection_Method = nat
type_synonym Connection_Data = string
type_synonym MEM_BLOCK_ID = nat
type_synonym TOTAL_SIZE = nat
type_synonym BIN_MEM_SIZE = nat
type_synonym TEE_OWN_SIZE = nat
type_synonym MESSAGE_HEAD_TYPE = nat
type_synonym BIN_TYPE = nat
type_synonym SIG_VER = nat
type_synonym ALGO = nat
type_synonym IMG_TYPE = nat
type_synonym RESV = nat
type_synonym RAW_IMG_SIZE = nat
type_synonym RAWING_HASH = nat
type_synonym IMG_HASH = nat
type_synonym SIG = nat
type_synonym BIN_BODY = nat
record BIN =
message_head :: "MESSAGE_HEAD_TYPE"
bin_result :: "BIN_TYPE"
sig_ver :: "SIG_VER"
algo :: "ALGO"
img_type :: "IMG_TYPE"
resv :: "RESV"
raw_img_size :: "RAW_IMG_SIZE"
rawing_hash :: "RAWING_HASH"
img_hash :: "IMG_HASH"
sig :: "SIG"
bin_body :: "BIN_BODY"
consts bin_mem_size::"BIN_MEM_SIZE"
consts tee_own_size::"TEE_OWN_SIZE"
consts someblockID1::nat
consts someblockID2::nat
definition INVALID_SESSION_ID where
"INVALID_SESSION_ID ≡(0::SESSION_ID_TYPE)"
datatype accessFlags = TEE_MEMORY_ACCESS_ANY_OWNER
| TEE_MEMORY_ACCESS_SECURE | TEE_MEMORY_ACCESS_NONSECURE | TEE_MEMORY_ACCESS_WRITE
| TEE_MEMORY_ACCESS_READ
datatype hint = TEE_MALLOC_FILL_ZERO | TEE_USER_MEM_HINT_NO_FILL_ZERO
datatype RIGHT_TYPE=TA_PERMISSION_GET_HWINFO|TA_PERMISSION_ACCESS_MISC_DEV|TA_PERMISSION_ACCESS_PLATFORM|TA_PERMISSION_ACCESS_SPI
record RIGHT =
hwinfo::RIGHT_TYPE
misc_dev::RIGHT_TYPE
access_platform::RIGHT_TYPE
access_api::RIGHT_TYPE
datatype TEE_RETURN_CODE_TYPE = TEE_SUCCESS
| TEE_PARAM_TYPE_NONE | TEE_PARAM_TYPE_VALUE_INPUT | TEE_PARAM_TYPE_MEMREF_INPUT
| TEE_PARAM_TYPE_VALUE_OUTPUT | TEE_PARAM_TYPE_MEMREF_OUTPUT | TEE_PARAM_TYPE_MEMREF_INOUT
| TEE_ERROR_OUT_OF_MEMORY | TEE_ERROR_ITEM_NOT_FOUND | TEE_ERROR_ACCESS_CONFLICT
| TEE_ERROR_BUSY | TEE_ERROR_TARGET_DEAD | TEE_ERROR_CANCEL | TEE_ERROR_BAD_PARAMETERS
| TEE_ERROR_SECURITY | TEE_ERROR_BAD_STATE | TEE_ERROR_GENERIC
datatype TEEC_RETURN_CODE_TYPE = TEEC_SUCCESS
| TEEC_ERROR_BAD_PARAMETERS |TEEC_ERROR_ITEM_NOT_FOUND|TEEC_ERROR_SECURITY|TEEC_ERROR_BUSY| TEEC_ERROR_OUT_OF_MEMORY
datatype TEEC_RET_ORIGIN = TEEC_ORIGIN_API|TEEC_ORIGIN_COMMS|TEEC_ORIGIN_TEE|TEEC_ORIGIN_TRUSTED_APP
type_synonym TEE_NAME = nat
type_synonym TEEC_RESULT = TEEC_RETURN_CODE_TYPE
datatype FLAGS_TYPE = TEEC_MEM_INPUT | TEEC_MEM_OUTPUT
datatype MEM_RIGHT = READ|WRITE|READWRITE
datatype TEEC_MEMREF_TYPE = TEEC_MEMREF_PARTIAL_INPUT | TEEC_MEMREF_PARTIAL_OUTPUT |
TEEC_MEMREF_PARTIAL_INOUT
datatype TEE_MEMREF_TYPE = TEE_MEMREF_PARTIAL_INPUT | TEE_MEMREF_PARTIAL_OUTPUT |
TEE_MEMREF_PARTIAL_INOUT
record TEEC_SharedMemory =
buffer :: MEM_BLOCK_ID
shared_size :: BUFFER_SIZE_TYPE
flags :: FLAGS_TYPE
shared_id :: BUFFER_ID_TYPE
alloced_size :: BUFFER_SIZE_TYPE
shadow_buffer :: MEM_BLOCK_ID
registered_fd :: FD_TYPE
buffer_allocated :: bool
record MemBlock =
block_id :: MEM_BLOCK_ID
size :: nat
ownership :: DOMAIN_ID
access_right :: "DOMAIN_ID ⇀ MEM_RIGHT"
is_SecureMem :: bool
related::"MEM_BLOCK_ID option"
datatype TEE_PARAM_TYPE = TEE_PARAM_TYPE_NONE | TEE_PARAM_TYPE_VALUE | tmt MemBlock
record PARAMS_TYPE =
paramTypes :: "TEE_PARAM_TYPES_TYPE list"
paramsVal :: "TEE_PARAM_TYPE list"
datatype TEE_RETURN_ORIGIN_TYPE = TEE_ORIGIN_API | TEE_ORIGIN_COMMS | TEE_ORIGIN_TEE | TEE_ORIGIN_TRUSTED_APP
datatype LOGIN_TYPE = REE_PUBLIC | TRUSTED_APP |KERN_IDENTITY|DTC_IDENTITY
record TEEC_Operation =
started :: "UINT32_t"
paramTypes :: "TEE_PARAM_TYPES_TYPE list"
paramsVal :: "TEE_PARAM_TYPE list"
record CLIENT_TYPE =
login :: LOGIN_TYPE
id :: "TA_UUID_TYPE option"
definition DefaultClientID where "DefaultClientID ≡ ⦇login=REE_PUBLIC,id=None⦈"
definition DefaultThreadID where "DefaultThreadID ≡ 0::nat"
subsection "PARAMETER for Mid functions"
subsection "TEE model params"
record TEE_Memref =
paramTypes :: "TEE_PARAM_TYPES_TYPE list"
paramsVal :: "TEE_PARAM_TYPE list"
typedecl TEE_TASessionHandle
section "MITEE MODEL"
subsection "REE model"
record TEEC_CONTEXT_TYPE =
ca_fd :: FD_TYPE
reg_mem :: SHM_FLAG_TYPE
record TEE_CONTEXT_TYPE =
ctx_fd :: FD_TYPE
tee_reg_mem :: SHM_FLAG_TYPE
driver_session_list :: "SESSION_ID_TYPE list"
record TEEC_SESSION_TYPE =
teec_ctx :: TEEC_CONTEXT_TYPE
teec_session_id :: SESSION_ID_TYPE
record REE_TYPE =
driver_mem :: "MemBlock list"
tee_ctx_list :: "TEE_CONTEXT_TYPE list"
ree_total_size :: TOTAL_SIZE
subsection "TA model"
record TEE_TA_ATTR_TYPE =
multiSession :: MULTI_SESSION_TYPE
keepAlive :: INSTANCE_KEEP_ALIVE_TYPE
singleInstance :: SINGLE_INSTANCE_TYPE
subsection "TEE model"
record TA_INSTANCE_CTX_TYPE=
ta_id :: TA_UUID_TYPE
cur_ta_session_list :: "SESSION_ID_TYPE list"
reference_cnt :: REF_CNT_TYPE
busy :: BUSY_TYPE
cur_ta_thread_id :: THREAD_ID_TYPE
attribute :: TEE_TA_ATTR_TYPE
record TA_MGR_SESSION_TYPE =
session_id :: SESSION_ID_TYPE
session_ctx :: THREAD_ID_TYPE
client_id :: CLIENT_TYPE
record TEE_TA_MANAGER =
mgr_ta_sessions :: "TA_MGR_SESSION_TYPE list"
mgr_ta_instances :: "TA_INSTANCE_CTX_TYPE list"
BIDpointer :: nat
record ZIRCON_TYPE =
property :: "TA_UUID_TYPE ⇀ TA_PRIORITY_TYPE"
type_synonym TEE_REE_IPC_DRIVER_TYPE=nat
record TEE_TYPE =
ta_mgr :: TEE_TA_MANAGER
tee_ree_ipc_driver :: TEE_REE_IPC_DRIVER_TYPE
zircon :: ZIRCON_TYPE
tee_memories :: "MemBlock list"
tee_total_size :: TOTAL_SIZE
section "State and Configuration"
record BIN_Handle =
mem_block :: "MemBlock option"
tabin :: "BIN option"
consts binHandle::"BIN_Handle option"
datatype TA_CONF = TAConf TA_UUID_TYPE TEE_TA_ATTR_TYPE RIGHT INIT OFFSET BIN
type_synonym TAs = "TA_UUID_TYPE⇀TA_CONF"
record Sys_Config =
REE :: DOMAIN_ID
TEE :: DOMAIN_ID
TA_conf :: TAs
checkcode :: CHECKCODE
TEE_name :: TEE_NAME
DefaultREESize :: TOTAL_SIZE
DefaultTEESize :: TOTAL_SIZE
record TA_State_Type =
TA_mode :: TA_MODE_TYPE
TA_sessions :: "SESSION_ID_TYPE list"
TA_instance_init :: INIT
TA_attribute :: TEE_TA_ATTR_TYPE
type_synonym TAs_State = "THREAD_ID_TYPE⇀TA_State_Type"
record EVENT_PARAM =
param1::"nat option"
param2::"nat option"
param3::"TEEC_Operation option"
param4::"CLIENT_TYPE option"
param5::"TEEC_CONTEXT_TYPE option"
param6::"nat option"
param7::"PARAMS_TYPE option"
param8::"PARAMS_TYPE option"
param9::"TA_INSTANCE_CTX_TYPE option"
param10::"MemBlock option"
param11::"TEEC_MEMREF_TYPE option"
param12::"TEEC_RETURN_CODE_TYPE option"
param13::"TEE_RETURN_CODE_TYPE option"
datatype EVENT_NAME = TEEC_OP1|TEEC_OP2|TEEC_OP3|TEEC_OP4|TEE_OP1|TEE_OP2|TEE_OP3|TEE_OP4|TEE_IC1|TEE_IC2|TEE_IC3|TEE_IC4
|TEE_CS1|TEE_CS2|TEE_CS3|TEE_CS4|TEEC_IC1|TEEC_IC2|TEEC_IC3|TEEC_IC4|TEEC_CS1|TEEC_CS2|TEEC_CS3|TEEC_CS4
record State =
current :: DOMAIN_ID
TAs_state :: TAs_State
REE_state :: REE_TYPE
TEE_state :: TEE_TYPE
system_time :: SYSTIME
exec_prime :: "(EVENT_PARAM × EVENT_NAME) list"
end